package cn.always.xiajia.framework.security.core.entity;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.fasterxml.jackson.annotation.JsonIgnore;

import cn.always.xiajia.framework.common.enums.UserTypeEnum;
import cn.hutool.core.map.MapUtil;
import lombok.Data;
import lombok.experimental.Accessors;

/**
 * 登录用户信息
 *
 * @author 芋道源码
 */
@Data
@Accessors(chain = true)
public class LoginUser {

	/**
	 * 用户ID
	 */
	protected Long userId;

	/**
	 * 用户编码
	 */
	protected String userCode;

	/**
	 * 用户名称
	 */
	protected String userName;

	/**
	 * 用户类型
	 *
	 * 关联 {@link UserTypeEnum}
	 */
	protected String userType;

	/**
	 * 授权范围
	 */
	protected List<String> scopes;

	// ========== 上下文 ==========
	/**
	 * 上下文字段，不进行持久化
	 *
	 * 1. 用于基于 LoginUser 维度的临时缓存
	 */
	@JsonIgnore
	private Map<String, Object> context;

	public void setContext(String key, Object value) {
		if (context == null) {
			context = new HashMap<>();
		}
		context.put(key, value);
	}

	public <T> T getContext(String key, Class<T> type) {
		return MapUtil.get(context, key, type);
	}
}
